Eksport jako package w PowerApps nie działa przez brakujące połączenia
Table of Contents
Czasami, gdy pracujemy z PowerApps, dodajemy nowe połączenia, takie jak Microsoft Flow lub do usług zewnętrznych, a następnie decydujemy, że nie potrzebujemy ich już więcej i wobec tego usuwamy je, jednak zapominając o ich uprzednim usunięciu w PowerApps. To prowadzi nas do sytuacji, gdy próbując wyeksportować później aplikację jako package, mamy do czynienia z bardzo trudnym do debugowania problemem.
Kiedy taka sytuacja ma miejsce?
Wyobraź sobie, że masz przycisk, który po kliknięciu uruchamia Flow. Albo wysyła e-mail przez connector Office365 Outlook. Podczas pracy z aplikacją, zdajesz sobie sprawę, że przepływ jest nieprawidłowy lub connector używa złych poświadczeń. Usuwasz przepływ lub łącznik.
Następnie zdajesz sobie sprawę, że przycisk w PowerApp powoduje błąd, ponieważ jest związany z nieistniejącym Flow/ Connectorem. W związku z tym zwyczajnie usuwasz ten kod z akcji „onclick” przycisku lub zastępujesz go innym, lub… całkowicie usuwasz przycisk z aplikacji, zamiast NAJPIERW usunąć powiązanie Flow/ Connection z aplikacji, klikając na przycisk, następnie „Action->Flows”, a następnie z powiązanej listy – „Remove from app”, jak poniżej:
Następnie publikujesz aplikację i… zapominasz o całej sytuacji. Wiele wersji później decydujesz się wyeksportować aplikację, jednak zamiast tego po chwili pokazuje się czerwony pasek (czerwony!!!) informujący, że: „Nie można znaleźć przepływu „GUID”.” lub „Nie można znaleźć połączenia „GUID”.”.
Czemu eksport się nie udaje?
Błąd pokazuje się dlatego, że mechanizm eksportu próbuje pobrać wszystkie połączenia zdefiniowane w aplikacji dlatego, aby podczas importowania aplikacji późniejszy użytkownik mógł je samodzielnie zdefiniować i podać poświadczenia (jeśli potrzebne). Ponieważ to konkretne połączenie nie istnieje (ponieważ zostało usunięte), ale nadal istnieje odniesienie do niego z aplikacji, mechanizm eksportu nie może go znaleźć, uzyskać do niego dostępu, a tym samym zakończyć swojego działania.
Jak to debugować?
Nie byłoby nic złego w tym problemie, gdyby nie fakt, że jako powód otrzymujemy jedynie identyfikator GUID brakującego połączenia, nie zaś jego nazwę lub jakiekolwiek inne informacje, które mogłyby nam pomóc w debugowaniu.
Niemniej jednak, nawet gdybyśmy wiedzieli, czego brakuje, nie wiem, czy istnieje sposób by przywrócić brakujące połączenie, zachowując jego GUID.
Tymczasem, aby dowiedzieć się, czego brakuje, najprostszym sposobem jest wykonanie następujących czynności (używam Visual Studio Code w tym celu):
- Zapisz aplikację lokalnie, na swoim komputerze,
- Zmień rozszerzenie pliku z
*.msapp
na*.zip
, - NIE ROZPAKOWUJ PLIKU! Po prostu otwórz go używając np. 7zip,
- Otwórz plik:
{zip}\References\DataSources.json
, - Szukaj wyświetlonego w błędzie numeru GUID,
- Kliknij „F1” i wpisz „Format Document” by otrzymać ładnie sformatowany kod JSON,
- Szukaj atrybutu „Name” wewnątrz obiektu zawierającego poszukiwany GUID, wewnątrz atrybutu „
AddinConnectorId
„.
Tak, to jest nazwa brakującego połączenia. Czy już Ci coś dzwoni? Myślę, że powinno, ponieważ jest to jedyna informacja w tym temacie.
Jak to naprawić?
Jeśli przycisk związany z problemem nadal znajduje się w Twojej aplikacji i szczęśliwie nie został zastąpiony niczym innym lub wiesz, w której wersji dokonano zmiany i nie powstało ich już kilkadziesiąt od tamtego czasu, możesz po prostu kliknąć na przycisk, następnie „Action->Flows”, a następnie z powiązanej listy – „Remove from app”, jak poniżej:
Na koniec opublikuj nową wersję aplikacji i spróbuj ponownie. Problem powinien być rozwiązany.
A co jeśli prosty sposób nie zadziała?
Opcjonalnie spróbuj otworzyć menu „View” -> „Data sources” i tam znaleźć niepodłączony Flow. Potem po prostu go usuń i znów – zapisz i opublikuj aplikację:
A co jeśli nie mogę znaleźć niepodłączonego połączenia?
Jedyne rozwiązanie, jakie do tej pory znalazłem, to praca nad plikami wewnątrz zapisanego lokalnie pliku *.msapp
. Zasadniczo są to dwa pliki, które zwykle zawierają wyświetlany identyfikator GUID:
- Properties.json – plik zlokalizowany w root-cie pliku msapp,
- DataSources.json – plik obecny w podkatalogu „References”.
Aby rozpocząć poprawki, najpierw wykonaj poniższe kroki:
- Zapisz aplikację lokalnie, na swoim komputerze (File, potem Save as):
- Zmień rozszerzenie pliku z
*.msapp
na*.zip
, - NIE ROZPAKOWUJ PLIKU! Po prostu otwórz go używając np. 7zip,
- Skopiuj dwa pliki, wspomniane powyżej, na zewnątrz archiwum.
I teraz możesz już zacząć naprawę 🙂
DataSources.json
Kroki są następujące (ponownie przy użyciu Visual Studio Code):
- Otwórz DataSources.json,
- Kliknij „F1” i wpisz „Format Document” by otrzymać sformatowany kod JSON,
- Szukaj GUID,
- Gdy znajdziesz, zaznacz cały obiekt, który zawiera poszukiwany GUID i usuń,
- Teraz naciśnij „CTRL+A” by zaznaczyć całą zawartość pliku,
- I ponownie kliknij „F1”, i wpisz „Join Lines” by otrzymać finalnie plik z zawartością wyświetlaną w jednej linijce.
Na koniec przenieś plik z powrotem do pliku ZIP, aby zastąpić istniejący plik. Gotowe!
Properties.json
To jest drugi plik, który należy naprawić. Wykonanie tego kroku jest nieco bardziej skomplikowane. Czynności są następujące (za pomocą Visual Studio Code):
- Otwórz Properties.json,
- Naciśnij „F1” i wpisz „Format Document” by otrzymać sformatowany kod JSON
- Szukaj GUID,
- Powinien się znajdować wewnątrz wyescapowanego ciągu JSON , będącego wartością zmiennej „
LocalConnectionReferences
„, - Skopiuj jego zawartość jednak bez otwierającego i zamykającego cudzysłowa,
- Wklej skopiowany kod w nowym pliku,
- Zmień typ dokumentu na JSON:
- Zamień wyeskapowane cudzysłowy zwykłymi (
\\"
to"
) by otrzymać prawidłowy JSON
- Naciśnij „F1” i wpisz „Format Document” by otrzymać prawidłowo sformatowany kod JSON,
- Usuń blok zawierający poszukiwany kod GUID,
- „CTRL+A” by zaznaczyć cały kod,
- Ponownie naciśnij „F1” i wpisz „Join Lines” by złączyć cały kod w jedną linię,
- Teraz zamień cudzysłowy
"
na wyescapeowane:\\"
, - Skopiuj kod i zamień nim wartość atrybutu „
LocalConnectionReferences
” wewnątrz pliku „Properties.json”.
Na koniec zastąp plikiem ten, istniejący wew. archiwum. Zrobione!
Wgrywanie naprawionego pliku
Ostatnim krokiem jest zamiana rozszerzenia pliku z *.zip
do *.msapp
. Po zrobieniu tego możemy kontynuować.
Teraz otwórz plik jako aplikację w designerze PowerApps. By to zrobić, otwórz stronę: https://us.create.powerapps.com/studio/.
Teraz kliknij „Open” i „Browse”, i przejdź do pliku, który chcesz otworzyć:
Następnie poczekaj, aż aplikacja zostanie załadowana. Po załadowaniu niestety musisz na nowo skonfigurować wszystkie połączenia, zweryfikować i poprawić błędy. Na koniec zapisz ją jako nową (lub zastąp istniejącą) aplikację, a następnie spróbuj wyeksportować ją ponownie jako pakiet. Działa jak marzenie! 🙂
Jeśli masz jakieś pytania lub komentarze, podziel się nimi poniżej!